﻿Imports System.Data.SqlClient
Imports UTNComputers.clsOrden_Servicio_Detalle
Imports UTNComputers.clsEstado_Os
Imports UTNComputers.daoEstado_Os
Imports UTNComputers.clsOrden_Servicio_Consumos
Imports UTNComputers.daoOrden_Servicio_Consumos

Public Class daoOrden_Servicio_Detalle
    'Funcion para el alta de Detalle de Orden de Servicio'
    Public Function Alta(ByVal OS_Detalle As clsOrden_Servicio_Detalle) As Boolean
        Dim Cn As New SqlConnection
        Dim Cm As New SqlCommand

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_ALTA_OS_DETALLE"

            Cm.Parameters.Add("@osdet_id", SqlDbType.Int)
            Cm.Parameters.Add("@os_id", SqlDbType.Int)
            Cm.Parameters.Add("@osdte_estado", SqlDbType.Int)
            Cm.Parameters.Add("@descri", SqlDbType.VarChar)
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)

            Cm.Parameters("@osdet_id").Value = OS_Detalle.Osdte_Id
            Cm.Parameters("@os_id").Value = OS_Detalle.Os_Id
            Cm.Parameters("@osdte_estado").Value = OS_Detalle.Osdte_Estado
            Cm.Parameters("@descri").Value = OS_Detalle.Descri.Trim.ToUpper
            Cm.Parameters("@Cod_Suc").Value = OS_Detalle.Cod_Suc

            Cm.Connection = Cn

            Cm.ExecuteNonQuery()
            Cn.Close()
            Return True

        Catch ex As Exception
            Return False
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para la modificacion detalle de Orden de Servicio'
    Public Function Modificar(ByVal OS_Detalle As clsOrden_Servicio_Detalle) As Boolean
        Dim Cn As New SqlConnection
        Dim Cm As New SqlCommand

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_MODI_OS_DETALLE"

            Cm.Parameters.Add("@osdet_id", SqlDbType.Int)
            Cm.Parameters.Add("@os_id", SqlDbType.Int)
            Cm.Parameters.Add("@osdte_estado", SqlDbType.Int)
            Cm.Parameters.Add("@descri", SqlDbType.VarChar)
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)

            Cm.Parameters("@osdet_id").Value = OS_Detalle.Osdte_Id
            Cm.Parameters("@os_id").Value = OS_Detalle.Os_Id
            Cm.Parameters("@osdte_estado").Value = OS_Detalle.Osdte_Estado
            Cm.Parameters("@descri").Value = OS_Detalle.Descri.Trim.ToUpper
            Cm.Parameters("@Cod_Suc").Value = OS_Detalle.Cod_Suc


            Cm.Connection = Cn

            Cm.ExecuteNonQuery()
            Cn.Close()
            Return True

        Catch ex As Exception
            Return False
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer un Detalle de Orden de Servicio por ID'
    Public Function TraeDetalleOrdenServicio(ByVal osdet_id As Integer) As clsOrden_Servicio_Detalle
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim OS_Detalle As New clsOrden_Servicio_Detalle()

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_OS_DETALLE"

            Cm.Parameters.Add("@osdet_id", SqlDbType.Int)
            Cm.Parameters("@osdet_id").Value = osdet_id
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    OS_Detalle.Osdte_Id = Dr.GetInt32(0)
                    OS_Detalle.Os_Id = Dr.GetInt32(1)
                    OS_Detalle.Osdte_Estado = Dr.GetInt32(2)
                    If Dr.IsDBNull(3) Then
                        OS_Detalle.Descri = "-"
                    Else
                        OS_Detalle.Descri = Dr.GetString(3).Trim.ToUpper
                    End If
                    OS_Detalle.Cod_Suc = Dr.GetInt32(4)

                    Dim Estado_OsDao As New daoEstado_Os()
                    OS_Detalle.Estado = Estado_OsDao.TraeEstadoOrdenServicio(OS_Detalle.Osdte_Estado)
                    Estado_OsDao.Dispose()

                    Dim OS_ConsumosDao As New daoOrden_Servicio_Consumos()
                    OS_Detalle.Consumos = OS_ConsumosDao.TraeConsumosOrdenServicio(OS_Detalle.Osdte_Id)
                    OS_ConsumosDao.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return OS_Detalle
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer Todos los detalles de una orden de servicio por Nº OS'
    Public Function TraeDetallesOrdenServicio(ByVal os_id As Integer) As List(Of clsOrden_Servicio_Detalle)
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim ListaDetalle_OS As New List(Of clsOrden_Servicio_Detalle)

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_OS_DETALLE_X_OS_ID"

            Cm.Parameters.Add("@os_id", SqlDbType.Int)
            Cm.Parameters("@os_id").Value = os_id

            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Dim OS_Detalle As New clsOrden_Servicio_Detalle()
                    OS_Detalle.Osdte_Id = Dr.GetInt32(0)
                    OS_Detalle.Os_Id = Dr.GetInt32(1)
                    OS_Detalle.Osdte_Estado = Dr.GetInt32(2)
                    If Dr.IsDBNull(3) Then
                        OS_Detalle.Descri = "-"
                    Else
                        OS_Detalle.Descri = Dr.GetString(3).Trim.ToUpper
                    End If

                    OS_Detalle.Cod_Suc = Dr.GetInt32(4)
                    Dim Estado_OsDao As New daoEstado_Os()
                    OS_Detalle.Estado = Estado_OsDao.TraeEstadoOrdenServicio(OS_Detalle.Osdte_Estado)
                    Estado_OsDao.Dispose()

                    Dim OS_ConsumosDao As New daoOrden_Servicio_Consumos()
                    OS_Detalle.Consumos = OS_ConsumosDao.TraeConsumosOrdenServicio(OS_Detalle.Osdte_Id)
                    OS_ConsumosDao.Dispose()

                    ListaDetalle_OS.Add(OS_Detalle)
                    OS_Detalle.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return ListaDetalle_OS
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer Todos los detalles de una orden de servicio por Nº OS'
    Public Function TraeDetallesOrdenServicioCodSuc(ByVal os_id As Integer, ByVal Cod_Suc As Int32) As List(Of clsOrden_Servicio_Detalle)
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim ListaDetalle_OS As New List(Of clsOrden_Servicio_Detalle)

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_OS_DETALLE_X_OS_ID"

            Cm.Parameters.Add("@os_id", SqlDbType.Int)
            Cm.Parameters("@os_id").Value = os_id

            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Dim OS_Detalle As New clsOrden_Servicio_Detalle()
                    OS_Detalle.Osdte_Id = Dr.GetInt32(0)
                    OS_Detalle.Os_Id = Dr.GetInt32(1)
                    OS_Detalle.Osdte_Estado = Dr.GetInt32(2)
                    If Dr.IsDBNull(3) Then
                        OS_Detalle.Descri = "-"
                    Else
                        OS_Detalle.Descri = Dr.GetString(3).Trim.ToUpper
                    End If

                    OS_Detalle.Cod_Suc = Dr.GetInt32(4)
                    Dim Estado_OsDao As New daoEstado_Os()
                    OS_Detalle.Estado = Estado_OsDao.TraeEstadoOrdenServicio(OS_Detalle.Osdte_Estado)
                    Estado_OsDao.Dispose()

                    Dim OS_ConsumosDao As New daoOrden_Servicio_Consumos()
                    OS_Detalle.Consumos = OS_ConsumosDao.TraeConsumosOrdenServicio(OS_Detalle.Osdte_Id)
                    OS_ConsumosDao.Dispose()

                    ListaDetalle_OS.Add(OS_Detalle)
                    OS_Detalle.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return ListaDetalle_OS
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function


    '---------------------------------------------------------------------
    ' Constructor de la Clase
    '---------------------------------------------------------------------
    Public Sub New()

        MyBase.New()

    End Sub

    '---------------------------------------------------------------------
    ' Destructor de la Clase
    '---------------------------------------------------------------------
    Public Sub Dispose()

        MyBase.Finalize()

    End Sub

End Class
